package db.entitylistener;

import lombok.extern.slf4j.Slf4j;

import javax.persistence.PostLoad;
import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;

@Slf4j
public class UserEntityListener {
    /**
     * 在实体保存到数据库之前执行的操作
     * @param o
     */
    @PrePersist
    public void prePersist(Object o) {
        log.info("Listening User Pre Persist : " + isOk(o));
    }

    private static boolean isOk(Object o) {
        boolean ok = false;
        if (o != null) {
            ok = true;
        }
        return ok;
    }

    /**
     * 在实体保存到数据库之后执行的操作
     * @param o
     */
    @PostPersist
    public void postPersist(Object o) {
        log.info("Listening User Post Persist : " + isOk(o));
    }

    /**
     * 在实体从数据库加载后执行的操作
     * @param o
     */
    @PostLoad
    public void postLoad(Object o) {
        log.info("Listening User Post Load : " + isOk(o));
    }

    /**
     * 在实体更新到数据库之前执行的操作
     * @param o
     */
    @PreUpdate
    public void preUpdate(Object o) {
        log.info("Listening User Pre Update : " + isOk(o));
    }

    /**
     * 在实体更新到数据库之后执行的操作
     * @param o
     */
    @PostUpdate
    public void postUpdate(Object o) {
        log.info("Listening User Post Update : " + isOk(o));
    }

    /**
     * 在实体从数据库删除之前执行的操作
     * @param o
     */
    @PreRemove
    public void preRemove(Object o) {
        log.info("Listening User Pre Remove : " + isOk(o));
    }

    /**
     * 在实体从数据库删除之后执行的操作
     * @param o
     */
    @PostRemove
    public void postRemove(Object o) {
        log.info("Listening User Post Remove : " + isOk(o));
    }
}
